﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using TrustX.Dados;
using System.Data.SqlClient;

namespace AcadPos.Data
{
    public class DBDocumento
    {
        #region Listar Documentos
        public DataTable listarDocumentos(int pMatricula, bool isAluno)
        {
            string SQL = @"SELECT td.ID_DOCUMENTO,
                                   td.DESCRICAO,    
                                   td.TIPO 
                            FROM   TB_DOCUMENTO td";
            if (isAluno)
            {
                SQL += @" WHERE  (td.ID_DOCUMENTO NOT IN (SELECT tda.ID_DOCUMENTO
                                                           FROM   TB_DOCUMENTO_ALUNO tda
                                                           WHERE  tda.MATRICULA = @MATRICULA AND tda.SITUACAO = 'N'))
                          AND td.TIPO = 'A'";
            }
            else
            {
                SQL += @" WHERE (td.ID_DOCUMENTO NOT IN (SELECT tdp.ID_DOCUMENTO
                                                        FROM   TB_DOCUMENTO_PROFISSIONAL tdp
                                                        WHERE  tdp.ID_PROFISSIONAL = @ID_PROFISSIONAL
                                                               AND tdp.SITUACAO = 'N')) 
                          AND td.TIPO = 'P'";
            }
            DataAccess db = new DataAccess(SQL);
            if (isAluno)
                db.AddParam("@MATRICULA", SqlDbType.Int, pMatricula);
            else db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, pMatricula);
            return db.GetDataTable();
        }
        #endregion

        #region Obter Documentos pendentes X Profissional
        public DataTable obterDocumentosXProfissional(int pCodigo)
        {
            string SQL = @"SELECT td.ID_DOCUMENTO,
                                   td.DESCRICAO
                            FROM   TB_DOCUMENTO td
                                   JOIN TB_DOCUMENTO_PROFISSIONAL tdp
                                        ON  tdp.ID_DOCUMENTO = td.ID_DOCUMENTO
                            WHERE  tdp.ID_PROFISSIONAL = @ID_PROFISSIONAL
                                   AND tdp.SITUACAO = 'N'";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, pCodigo);
            return db.GetDataTable();
        }
        #endregion

        #region Obter Documentos x Aluno
        public DataTable obterDocumentosXAluno(int pMatricula)
        {
            string SQL = @"SELECT td.ID_DOCUMENTO, 
                                  td.DESCRICAO                                  
                            FROM  TB_DOCUMENTO td
                                  JOIN TB_DOCUMENTO_ALUNO tda
                                       ON  tda.ID_DOCUMENTO = td.ID_DOCUMENTO
                            WHERE tda.MATRICULA = @MATRICULA
                            AND tda.SITUACAO = 'N' ";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@MATRICULA", SqlDbType.Int, pMatricula);
            return db.GetDataTable();
        }
        #endregion

        #region Inserir Documento Pendente
        public bool inserirDocumentoPendente(int pMatricula, int pCodDoc)
        {
            string SQL = @"INSERT INTO TB_DOCUMENTO_ALUNO
                              (
                                MATRICULA,
                                ID_DOCUMENTO,
                                DATA_CADASTRO,
                                SITUACAO
                              )
                            VALUES
                              (
                                @MATRICULA,
                                @ID_DOCUMENTO,
                                GETDATE(),
                                'N'
                              )";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@MATRICULA", SqlDbType.Int, pMatricula);
            db.AddParam("@ID_DOCUMENTO", SqlDbType.Int, pCodDoc);
            return db.ExecuteNonQuery();
        }
        #endregion

        #region Remover Pendência de Documento do aluno
        public bool removerPendenciaDocumento(int pMatricula, int pCodDoc)
        {
            string SQL = @"UPDATE TB_DOCUMENTO_ALUNO
                            SET    DATA_ENTREGA      = GETDATE(),
                                   SITUACAO          = 'S'
                            WHERE  MATRICULA         = @MATRICULA
                                   AND ID_DOCUMENTO  = @ID_DOCUMENTO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@MATRICULA", SqlDbType.Int, pMatricula);
            db.AddParam("@ID_DOCUMENTO", SqlDbType.Int, pCodDoc);
            return db.ExecuteNonQuery();
        }
        #endregion

        #region Inserir Documento Pendente - Profissional
        public bool inserirDocumentoPendenteProfissional(int pCodProfissional, int pCodDoc, string usuario)
        {
            string SQL = @"INSERT INTO TB_DOCUMENTO_PROFISSIONAL
                              (
                                ID_PROFISSIONAL,
                                ID_DOCUMENTO,
                                DATA_CADASTRO,
                                SITUACAO
                              )
                            VALUES
                              (
                                @ID_PROFISSIONAL,
                                @ID_DOCUMENTO,
                                GETDATE(),
                                'N'
                              )";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, pCodProfissional);
            db.AddParam("@ID_DOCUMENTO", SqlDbType.Int, pCodDoc);

            //return db.ExecuteNonQuery();

            bool inseriu = db.ExecuteNonQuery();

            if (inseriu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                  (
                    ACAO,
                    TABELA,
                    DESCRICAO,
                    USUARIO,
                    DATA                                    
                  )
                VALUES
                  (                                     
                    'INSERT',
                    'TB_DOCUMENTO_PROFISSIONAL',
                    (SELECT(SELECT CAST(MAX(ID_PROFISSIONAL_DOCUMENTO) AS VARCHAR) FROM TB_DOCUMENTO_PROFISSIONAL)
                     + ' | ' + CAST(@ID_PROFISSIONAL AS VARCHAR)
                     + ' | ' + CAST(@ID_DOCUMENTO AS VARCHAR)
                     + ' | ' + UPPER(@SITUACAO)),                        
                    UPPER(@USUARIO),
                    GETDATE()
                  )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_PROFISSIONAL", SqlDbType.VarChar, pCodProfissional);
                db.AddParam("@ID_DOCUMENTO", SqlDbType.VarChar, pCodDoc);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, 'N');   // CONFORME PADRÃO DO INSERT
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }
            db.ExecuteNonQuery();
            return inseriu;
        }
        #endregion

        #region Remover Pendência - Profissional
        public bool removerPendenciaProfissional(int pCodProfissional, int pCodDoc, string usuario)
        {
            string SQL = @"SELECT 
                            ID_PROFISSIONAL_DOCUMENTO,
                            ID_PROFISSIONAL,
                            ID_DOCUMENTO,
                            SITUACAO 
                                FROM   TB_DOCUMENTO_PROFISSIONAL
                                    WHERE  ID_PROFISSIONAL = @ID_PROFISSIONAL
                                          AND ID_DOCUMENTO = @ID_DOCUMENTO";

            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, pCodProfissional);
            db.AddParam("@ID_DOCUMENTO", SqlDbType.Int, pCodDoc);
            int idProfDoc = 0;

            try
            {
                db.AbrirConexao();
                SqlDataReader dr = db.ExecuteReader();

                if (dr.Read())
                {
                    idProfDoc = Convert.ToInt32(dr["ID_PROFISSIONAL_DOCUMENTO"]);                    
                }
            }
            catch
            { return false; }
            finally
            { db.FecharConexao(); }

            db.AbrirConexao();
            db.Command.Parameters.Clear();

            SQL = @"UPDATE TB_DOCUMENTO_PROFISSIONAL
                            SET    DATA_ENTREGA      = GETDATE(),
                                   SITUACAO          = 'S'
                            WHERE  ID_PROFISSIONAL   = @ID_PROFISSIONAL
                                   AND ID_DOCUMENTO  = @ID_DOCUMENTO";
            
            db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, pCodProfissional);
            db.AddParam("@ID_DOCUMENTO", SqlDbType.Int, pCodDoc);

            //return db.ExecuteNonQuery();

            bool excluiu = db.ExecuteNonQuery();

            if (excluiu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                  (
                    ACAO,
                    TABELA,
                    DESCRICAO,
                    USUARIO,
                    DATA                                    
                  )
                VALUES
                  (                                     
                    'UPDATE',
                    'TB_DOCUMENTO_PROFISSIONAL',
                    (SELECT CAST(@ID_PROFISSIONAL_DOCUMENTO AS VARCHAR)
                    + ' | ' + CAST(@ID_PROFISSIONAL AS VARCHAR)
                    + ' | ' + CAST(@ID_DOCUMENTO AS VARCHAR)
                    + ' | ' + UPPER(@SITUACAO)),                        
                    UPPER(@USUARIO),
                    GETDATE()
                  )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_PROFISSIONAL_DOCUMENTO", SqlDbType.VarChar, idProfDoc);
                db.AddParam("@ID_PROFISSIONAL", SqlDbType.VarChar, pCodProfissional);
                db.AddParam("@ID_DOCUMENTO", SqlDbType.VarChar, pCodDoc);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, 'S');   // CONFORME PADRÃO DO DELETE
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }
            db.ExecuteNonQuery();
            return excluiu;
        }
        #endregion
    }
}
